iT邦幫忙

2021 iThome 鐵人賽

DAY 6
1
Modern Web

還喝不 go系列 第 6

[13th][Day6] func

  • 分享至 

  • xImage
  •  

about func

有了變數、有了保留字之後,我們需要 方法/function/method/函式/func,可以讓程式的結構更整潔、減少重複性 ... 之類的功能

在剛開始寫 go 時,我們大部分的程式碼都是放在主函式 func main() 中

package main
func main() {
    //mission 1
    //mission 2
    //mission 3
    .
    .
    .
    END
}

隨著程式碼規模提升,這樣寫法漸漸不敷使用

一個 func 動輒上百行,假設有 20 個 func 就要兩千行,程式碼上下捲動不易維護,也無法將程式碼分離在不同檔案中。

用寫函式 (function) 的方式來分離程式碼,函式是程式碼共用的基礎。物件導向的方法 (method) 是以函式為基礎。

之前在聊變數時,就已經使用過一些函式了,像是在 fmt 套件的 Println 函式,可在 terminal 中印出文字。

Public vs private
依宣告規則, Go 的公開函式都是以大寫開頭,這是 Go 語言的一項設計

使用大小寫來控管套件中函式和方法的權限

只有字母大寫的函式或方法才會公開給外界使用。

來寫一個簡單的 hello func,並且呼叫三次:

package main
 
import (
    "fmt"
)
 
func helloGo() {
    fmt.Println("Hello ironman2021")
}
 
func main() {
    helloGo()
    helloGo()
    helloGo()
}

雖然這個函式非常簡單,但可以知道,函式可以『重覆再利用』的。

parameter
函式可以加入參數 (parameter),透過參數來改變函式的行為

package main
 
import (
    "fmt"
)
 
func hello(name string) {
    fmt.Println(fmt.Sprintf("Hello %s", name))
}
 
func main() {
    hello("Eric")
    hello("William")
    hello("Amy")
}

輸出為

Hello Eric
Hello William
Hello Amy

return

函式運作後,可以回傳值到外層 (return value)

package main
 
import (
    "log"
    "math"
)
 
func add(a float64, b float64) float64 {
    return a + b
}
 
func main() {
    x := add(0.3, 0.4)
	fmt.Println(x)
}

x 為 add() 方法 return 的計算結果

注意!! 如果在 go 宣告了一個變數 但沒有使用它 會編譯失敗

x declared but not used

多值回傳
Go 函式允許多個回傳值,如以下實例:

package main
 
import (
    "log"
)
 
func addsub(a int, b int) (int, int) {
    return a + b, a - b
}
 
func main() {
    m, n := addsub(5, 3)
 
    fmt.Println("m =", m, "n =", n)
}

輸出為
m = 8 n = 2

多回傳值時常用於錯誤處理 (error handling) 中,比方說...call API 失敗, 寫入 DB 失敗, parseInt 失敗...等 各種失敗

錯誤處理在 golang 中是很重要的一環,避免 panic 避免服務死掉,是我們的最高原則


上一篇
[13th][Day5] Goroutine
下一篇
[13th][Day7] func -1
系列文
還喝不 go23
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言